1. Field of the Invention
The present invention relates to an object-oriented method and apparatus for delivering information within a computer or across a network of computers. More particularly, the invention relates to a distributed object system using a factory/stream model for delivering data and related context from one component in the computer or network to another.
2. Background
Distributed computing consists of two or more pieces of software sharing information with each other. These two pieces of software could be running on the same computer or on different computers connected to a common network. Most distributed computing is based on a client/server model. With the client server model, two major types of software are utilized: client software, which requests the information or service, and server software, which provides the information or service.
Information or services are usually delivered from server to client by Information Delivery System software applications. Such applications are often monolithic, protocol-specific, UNIX-based server applications consisting of a module that awaits a request for information from a client application. Once that request arrives, the module will copy (or "replicate") itself and the copy of the module will process the request. The request will be processed by the copy, for example, by providing information from an SQL database or information contained in a local disk file. Meanwhile, the original module will continue to monitor for incoming requests.
This information delivery system architecture, however, is usually protocol-specific. In other words, the delivery system application only supports a particular protocol, such as HTTP, TCP/IP, or SPX. Thus, requests arriving via an unsupported protocol cannot be serviced. Such systems are inherently inflexible and non-extensible.
Attempts by monolithic applications to support multiple protocols further demonstrate their non-extensibility. Generally, however, adding support for several protocols requires adding additional code in the application. As more and more protocols are created, the application becomes correspondingly larger. If the application is executing a single process, the application may run without errors. If, however, the application is running multiple processes, too many system resources are utilized and the application crashes.
Moreover, the lack of fault tolerance and error-handling in many of these systems makes correction almost impossible. When system resources are depleted and the application terminates, it is often difficult to determine which client request triggered the breakdown. For instance, the system has no built-in mechanism for determining whether an SQL query or a World Wide Web page request caused the error. Accordingly, the application cannot be readily debugged and corrected.
One possible solution is the use of a distributed object system. Distributed object computing combines the concepts of distributed computing (described above) and object-oriented computing. Object-oriented computing is based upon the object model where pieces of code called "objects"--abstracted from real objects in the real world--own attributes and provide services through methods (or "operations" or "member functions"). Typically, the methods operate on the private attributes (data) that the object owns. A collection of like objects make up an interface (or "class" in C++ parlance). Each object is identified by a unique identifier called an object reference.
In a distributed object system, a client sends a request (or performs an "object call") containing an indication of the operation for the server to perform, the object reference, and a mechanism to return "exception information, about the success or failure of a request. In addition, certain "context" information concerning the client (such as the platform or machine) may be included in the request. The server receives the request and, if possible, carries out the request on the specific object and returns information regarding the success or failure of the operation ("exception information"). Both client and server must have information about the available objects and operations that can be performed. Accordingly, both must have access to a common language, such as the Interface Definition Language (IDL), as defined by the Object Management Group (OMG). Interface definitions are usually written in IDL, compiled, and linked into the client and server applications.
Distributed object computing solves some of the problems associated with the prior art monolithic applications. With distributed objects, large applications can be broken down into smaller "components", making the system more manageable and less subject to breakdown. Moreover, the system allows various components to plug-and-play, interoperate across networks, run on different platforms, coexist with legacy applications through object wrappers, roam on networks, and manage themselves and the resources they control. In addition, errors may be caught using exception handling.
Unfortunately, the current standard architectures for distributed systems have not specifically addressed how information can be provided from numerous information providers to clients over multiple protocols. The Common Object Request Broker Architecture (CORBA) proposed by OMG utilizes an object request broker (ORB) to handle object calls between a client and a server. The CORBA standard, however, remains tied to the use of a specific protocol. Other standards, such as OpenDoc and OLE, are similarly protocol-specific.
Furthermore, in traditional distributed object systems, a classical object call is based upon a request/response mechanism. Accordingly, only certain amounts of information may be transmitted in a particular object call. Prior art information delivery systems offer no mechanism for supporting delivery of large amounts of data (4 GB of video data, e.g.).
Accordingly, a need exists for a method for delivering information that supports multiple protocols.
Further, a need exists for a method for delivering information that uses distributed object technology to promote the use of individual components.
Further, a need exists for a method for delivering large amounts of data across a network.